/**
 * 任务状态
 */
export type TaskStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'retrying';

/**
 * 任务优先级
 */
export enum TaskPriority {
  Low = 0,
  Normal = 1,
  High = 2,
  Critical = 3,
}

/**
 * 任务队列项
 */
export interface TaskQueueItem<T> {
  /** 任务ID */
  id: string;
  /** 任务数据 */
  data: T;
  /** 提供者标识 */
  provider: string;
  /** 创建时间戳 */
  timestamp: number;
  /** 任务状态 */
  status: TaskStatus;
  /** 任务优先级 */
  priority: TaskPriority;
  /** 重试次数 */
  retryCount: number;
  /** 最大重试次数 */
  maxRetries: number;
  /** 最后一次错误信息 */
  lastError?: string;
  /** 最后处理时间 */
  lastProcessedAt?: number;
}

/**
 * 任务队列配置
 */
export interface TaskQueueOptions {
  /** 存储命名空间 */
  namespace: string;
  /** 存储名称 */
  storeName?: string;
  /** 默认最大重试次数 */
  defaultMaxRetries?: number;
  /** 默认任务优先级 */
  defaultPriority?: TaskPriority;
  /** 任务过期时间（毫秒） */
  taskExpiration?: number;
  /** 自动清理间隔（毫秒） */
  cleanupInterval?: number;
  /** 最大并发消费数量 */
  maxConcurrency?: number;
  /** 重试延迟时间（毫秒） */
  retryDelay?: number;
}

/**
 * 任务状态变更事件
 */
export interface TaskStatusChangeEvent<T> {
  taskId: string;
  oldStatus: TaskStatus;
  newStatus: TaskStatus;
  task: TaskQueueItem<T>;
}
